/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gov.mtc.dgac.licencias.persistence;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import pe.gov.mtc.dgac.licencias.bean.ClienteTO;
import pe.gov.mtc.dgac.licencias.exception.TransactionException;
import pe.gov.mtc.dgac.licencias.util.Page;

/**
 *
 * @author externo.gamaro
 */
public class ClienteImplDAO extends SqlMapClientTemplate implements ClienteDAO {
     Log logger = LogFactory.getLog(this.getClass());

    public List<ClienteTO> buscarCliente(ClienteTO cliente) throws TransactionException {
          List<ClienteTO> list=null;
       
      try{
          Map<String, Object> parmMap = new HashMap<String, Object>();
			
	  parmMap.put("pCodCli",cliente.getCodCliente()); 
          parmMap.put("pNombres",cliente.getNombres()); 
          parmMap.put("pApePat",cliente.getApellidoPat()); 
          parmMap.put("pApeMat",cliente.getApellidoMat()); 
          parmMap.put("pNumDoc",cliente.getNumIdDoc()); 
                  
          queryForObject("Cliente.listCliente", parmMap);
          list=(List<ClienteTO>)parmMap.get("pResult");
       
      }catch(Exception e){
        e.printStackTrace();
	logger.error(e);
      }
       return list;
    }

    public Page buscarCliente(ClienteTO cliente, int page, int pageSize) throws TransactionException {
         
          List<ClienteTO> list=null;
          int first = Page.getStartItemByPage(page, pageSize);
          int last = first + pageSize - 1;
          int totalElements=0;
      try{
          Map<String, Object> parmMap = new HashMap<String, Object>();
			
	  parmMap.put("pCodCli",cliente.getCodCliente()); 
          parmMap.put("pNombres",cliente.getNombres()); 
          parmMap.put("pApePat",cliente.getApellidoPat()); 
          parmMap.put("pApeMat",cliente.getApellidoMat()); 
          parmMap.put("pNumDoc",cliente.getNumIdDoc()); 
          parmMap.put("pFistElement",first); 
          parmMap.put("pLastElement",last); 
          
          queryForObject("Cliente.buscarCliente", parmMap);
          list=(List<ClienteTO>)parmMap.get("pResult");
          String totReg=(String) parmMap.get("pTotReg");
          totalElements=Integer.parseInt(totReg);
      }catch(Exception e){
        e.printStackTrace();
	logger.error(e);
      }
       return new Page(list,page,pageSize,totalElements);
    }

    public HashMap insertCliente(ClienteTO cliente) throws TransactionException {
          HashMap result=null;
          List list=null;
      try{
          Map<String, Object> parmMap = new HashMap<String, Object>();
			
	  parmMap.put("pNumDoc",cliente.getNumIdDoc()); 
          parmMap.put("pApePat",cliente.getApellidoPat()); 
          parmMap.put("pApeMat",cliente.getApellidoMat()); 
          parmMap.put("pNombres",cliente.getNombres()); 
          parmMap.put("pSexo",cliente.getSexo()); 
          parmMap.put("pFecNac",cliente.getSfecha_nac()); 
          parmMap.put("pEstCivil",cliente.getEstadoCivil()); 
          parmMap.put("pDireccion",cliente.getDireccion()); 
          parmMap.put("pTelefono",cliente.getTelefono()); 
          parmMap.put("pUbigeo",cliente.getUbigeo().getUbigeoid()); 
          parmMap.put("pPais",cliente.getPais()); 
          parmMap.put("pNacionalidad",cliente.getNacionalidad()); 
          parmMap.put("pTipoDoc",cliente.getTipoIdDoc().getTipoIdDoc()); 
          parmMap.put("pUsuario",cliente.getUsuarioCrea()); 
          parmMap.put("pOcupacion",cliente.getOcupacion()); 
          parmMap.put("pEmail",cliente.getEmail()); 
          parmMap.put("pEstatura",cliente.getEstatura()); 
          parmMap.put("pPeso",cliente.getPeso()); 
          parmMap.put("pColorOjos",cliente.getColorOjos()); 
          parmMap.put("pObservaciones",cliente.getObservaciones()); 
          parmMap.put("pFechaSuspen",cliente.getSfecha_suspen()); 
          parmMap.put("pMotivoSuspen",cliente.getMotivoSuspen()); 
          parmMap.put("pDepartamentoid",cliente.getUbigeo().getDptoid()); 
          parmMap.put("pProvinciaid",cliente.getUbigeo().getProvid()); 
          
          queryForObject("Cliente.insertCliente", parmMap);
          list=(List)parmMap.get("pResult");
          result=(HashMap) list.get(0);
          
      }catch(Exception e){
        e.printStackTrace();
	logger.error(e);
      }
       return result;
    }
   public HashMap updateCliente(ClienteTO cliente) throws TransactionException {
          HashMap result=null;
          List list=null;
          
      try{
          Map<String, Object> parmMap = new HashMap<String, Object>();
			
	  parmMap.put("pCodCli",cliente.getCodCliente()); 
          parmMap.put("pNumDoc",cliente.getNumIdDoc()); 
          parmMap.put("pApePat",cliente.getApellidoPat()); 
          parmMap.put("pApeMat",cliente.getApellidoMat()); 
          parmMap.put("pNombres",cliente.getNombres()); 
          parmMap.put("pSexo",cliente.getSexo()); 
          parmMap.put("pFecNac",cliente.getSfecha_nac()); 
          parmMap.put("pEstCivil",cliente.getEstadoCivil()); 
          parmMap.put("pDireccion",cliente.getDireccion()); 
          parmMap.put("pTelefono",cliente.getTelefono()); 
          parmMap.put("pUbigeo",cliente.getUbigeo().getUbigeoid()); 
          parmMap.put("pPais",cliente.getPais()); 
          parmMap.put("pNacionalidad",cliente.getNacionalidad()); 
          parmMap.put("pTipoDoc",cliente.getTipoIdDoc().getTipoIdDoc()); 
          parmMap.put("pUsuario",cliente.getUsuarioCrea()); 
          parmMap.put("pOcupacion",cliente.getOcupacion()); 
          parmMap.put("pEmail",cliente.getEmail()); 
          parmMap.put("pEstatura",cliente.getEstatura()); 
          parmMap.put("pPeso",cliente.getPeso()); 
          parmMap.put("pColorOjos",cliente.getColorOjos()); 
          parmMap.put("pObservaciones",cliente.getObservaciones()); 
          parmMap.put("pFechaSuspen",cliente.getSfecha_suspen()); 
          parmMap.put("pMotivoSuspen",cliente.getMotivoSuspen()); 
          parmMap.put("pDepartamentoid",cliente.getUbigeo().getDptoid()); 
          parmMap.put("pProvinciaid",cliente.getUbigeo().getProvid()); 
          
          queryForObject("Cliente.updateCliente", parmMap);
          list=(List)parmMap.get("pResult");
          result=(HashMap) list.get(0);
          
          
      }catch(Exception e){
        e.printStackTrace();
	logger.error(e);
      }
       return result;
    }
}
